﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SmartMathLibrary.Management.Performance
{
    /// <summary>
    /// This struct holds significant information of a video controller.
    /// </summary>
    [Serializable]
    public struct VideoControllerInformation
    {
        /// <summary>
        /// The AdapterCompatibility property.
        /// </summary>
        private string adapterCompatibility;

        /// <summary>
        /// The AdapterDACType property.
        /// </summary>
        private string adapterDACType;

        /// <summary>
        /// The AdapterRAM property.
        /// </summary>
        private UInt32 adapterRAM;

        /// <summary>
        /// The Availability property.
        /// </summary>
        private UInt16 availability;

        /// <summary>
        /// The Caption property.
        /// </summary>
        private string caption;

        /// <summary>
        /// The ColorTableEntries property.
        /// </summary>
        private UInt32 colorTableEntries;

        /// <summary>
        /// The ConfigManagerErrorCode property.
        /// </summary>
        private UInt32 configManagerErrorCode;

        /// <summary>
        /// The ConfigManagerUserConfig property.
        /// </summary>
        private bool configManagerUserConfig;

        /// <summary>
        /// The CreationClassName property.
        /// </summary>
        private string creationClassName;

        /// <summary>
        /// The CurrentBitsPerPixel property.
        /// </summary>
        private UInt32 currentBitsPerPixel;

        /// <summary>
        /// The CurrentHorizontalResolution property.
        /// </summary>
        private UInt32 currentHorizontalResolution;

        /// <summary>
        /// The CurrentNumberOfColors property.
        /// </summary>
        private UInt64 currentNumberOfColors;

        /// <summary>
        /// The CurrentNumberOfColumns property.
        /// </summary>
        private UInt32 currentNumberOfColumns;

        /// <summary>
        /// The CurrentNumberOfRows property.
        /// </summary>
        private UInt32 currentNumberOfRows;

        /// <summary>
        /// The CurrentRefreshRate property.
        /// </summary>
        private UInt32 currentRefreshRate;

        /// <summary>
        /// The CurrentScanMode property.
        /// </summary>
        private UInt16 currentScanMode;

        /// <summary>
        /// The CurrentVerticalResolution property.
        /// </summary>
        private UInt32 currentVerticalResolution;

        /// <summary>
        /// The Description property.
        /// </summary>
        private string description;

        /// <summary>
        /// The DeviceID property.
        /// </summary>
        private string deviceID;

        /// <summary>
        /// The DeviceSpecificPens property.
        /// </summary>
        private UInt32 deviceSpecificPens;

        /// <summary>
        /// The DitherType property.
        /// </summary>
        private UInt32 ditherType;

        /// <summary>
        /// The DriverVersion property.
        /// </summary>
        private string driverVersion;

        /// <summary>
        /// The InstalledDisplayDrivers property.
        /// </summary>
        private string installedDisplayDrivers;

        /// <summary>
        /// The MaxMemorySupported property.
        /// </summary>
        private UInt32 maxMemorySupported;

        /// <summary>
        /// The MaxNumberControlled property.
        /// </summary>
        private UInt32 maxNumberControlled;

        /// <summary>
        /// The MaxRefreshRate property.
        /// </summary>
        private UInt32 maxRefreshRate;

        /// <summary>
        /// The MinRefreshRate property.
        /// </summary>
        private UInt32 minRefreshRate;

        /// <summary>
        /// The Monochrome property.
        /// </summary>
        private bool monochrome;

        /// <summary>
        /// The Name property.
        /// </summary>
        private string name;

        /// <summary>
        /// The NumberOfColorPlanes property.
        /// </summary>
        private UInt16 numberOfColorPlanes;

        /// <summary>
        /// The NumberOfVideoPages property.
        /// </summary>
        private UInt32 numberOfVideoPages;

        /// <summary>
        /// The PNPDeviceID property.
        /// </summary>
        private string pnpDeviceID;

        /// <summary>
        /// The PowerManagementSupported property.
        /// </summary>
        private bool powerManagementSupported;

        /// <summary>
        /// The ProtocolSupported property.
        /// </summary>
        private UInt16 protocolSupported;

        /// <summary>
        /// The ReservedSystemPaletteEntries property.
        /// </summary>
        private UInt32 reservedSystemPaletteEntries;

        /// <summary>
        /// The SpecificationVersion property.
        /// </summary>
        private UInt32 specificationVersion;

        /// <summary>
        /// The Status property.
        /// </summary>
        private string status;

        /// <summary>
        /// The StatusInfo property.
        /// </summary>
        private UInt16 statusInfo;

        /// <summary>
        /// The SystemCreationClassName property.
        /// </summary>
        private string systemCreationClassName;

        /// <summary>
        /// The SystemName property.
        /// </summary>
        private string systemName;

        /// <summary>
        /// The SystemPaletteEntries property.
        /// </summary>
        private UInt32 systemPaletteEntries;

        /// <summary>
        /// The VideoArchitecture property.
        /// </summary>
        private UInt16 videoArchitecture;

        /// <summary>
        /// The VideoMemoryType property.
        /// </summary>
        private UInt16 videoMemoryType;

        /// <summary>
        /// The VideoMode property.
        /// </summary>
        private UInt16 videoMode;

        /// <summary>
        /// The VideoModeDescription property.
        /// </summary>
        private string videoModeDescription;

        /// <summary>
        /// The VideoProcessor property.
        /// </summary>
        private string videoProcessor;

        /// <summary>
        /// Gets or sets the AdapterCompatibility property.
        /// </summary>
        /// <value>The AdapterCompatibility property.</value>
        public string AdapterCompatibility
        {
            get { return adapterCompatibility; }
            set { adapterCompatibility = value; }
        }

        /// <summary>
        /// Gets or sets the AdapterDACType property.
        /// </summary>
        /// <value>The AdapterDACType property.</value>
        public string AdapterDACType
        {
            get { return adapterDACType; }
            set { adapterDACType = value; }
        }

        /// <summary>
        ///  Gets or sets the AdapterRAM property.
        /// </summary>
        /// <value>The AdapterRAM property.</value>
        public UInt32 AdapterRAM
        {
            get { return adapterRAM; }
            set { adapterRAM = value; }
        }

        /// <summary>
        /// Gets or sets the Availability property.
        /// </summary>
        /// <value>The Availability property.</value>
        public UInt16 Availability
        {
            get { return availability; }
            set { availability = value; }
        }

        /// <summary>
        /// Gets or sets the Caption property.
        /// </summary>
        /// <value>The Caption property.</value>
        public string Caption
        {
            get { return caption; }
            set { caption = value; }
        }

        /// <summary>
        /// Gets or sets the ColorTableEntries property.
        /// </summary>
        /// <value>The ColorTableEntries property.</value>
        public UInt32 ColorTableEntries
        {
            get { return colorTableEntries; }
            set { colorTableEntries = value; }
        }

        /// <summary>
        /// Gets or sets the ConfigManagerErrorCode property.
        /// </summary>
        /// <value>The ConfigManagerErrorCode property.</value>
        public UInt32 ConfigManagerErrorCode
        {
            get { return configManagerErrorCode; }
            set { configManagerErrorCode = value; }
        }

        /// <summary>
        /// Gets or sets the ConfigManagerUserConfig property.
        /// </summary>
        /// <value>The ConfigManagerUserConfig property.</value>
        public bool ConfigManagerUserConfig
        {
            get { return configManagerUserConfig; }
            set { configManagerUserConfig = value; }
        }

        /// <summary>
        /// Gets or sets the CreationClassName property.
        /// </summary>
        /// <value>The CreationClassName property.</value>
        public string CreationClassName
        {
            get { return creationClassName; }
            set { creationClassName = value; }
        }

        /// <summary>
        /// Gets or sets the CurrentBitsPerPixel property.
        /// </summary>
        /// <value>The CurrentBitsPerPixel property.</value>
        public UInt32 CurrentBitsPerPixel
        {
            get { return currentBitsPerPixel; }
            set { currentBitsPerPixel = value; }
        }

        /// <summary>
        /// Gets or sets the CurrentHorizontalResolution property.
        /// </summary>
        /// <value>The CurrentHorizontalResolution property.</value>
        public UInt32 CurrentHorizontalResolution
        {
            get { return currentHorizontalResolution; }
            set { currentHorizontalResolution = value; }
        }

        /// <summary>
        /// Gets or sets the CurrentNumberOfColors property.
        /// </summary>
        /// <value>The CurrentNumberOfColors property.</value>
        public UInt64 CurrentNumberOfColors
        {
            get { return currentNumberOfColors; }
            set { currentNumberOfColors = value; }
        }

        /// <summary>
        /// Gets or sets the CurrentNumberOfColumns property.
        /// </summary>
        /// <value>The CurrentNumberOfColumns property.</value>
        public UInt32 CurrentNumberOfColumns
        {
            get { return currentNumberOfColumns; }
            set { currentNumberOfColumns = value; }
        }

        /// <summary>
        /// Gets or sets the CurrentNumberOfRows property.
        /// </summary>
        /// <value>The CurrentNumberOfRows property.</value>
        public UInt32 CurrentNumberOfRows
        {
            get { return currentNumberOfRows; }
            set { currentNumberOfRows = value; }
        }

        /// <summary>
        /// Gets or sets the CurrentRefreshRate property.
        /// </summary>
        /// <value>The CurrentRefreshRate property.</value>
        public UInt32 CurrentRefreshRate
        {
            get { return currentRefreshRate; }
            set { currentRefreshRate = value; }
        }

        /// <summary>
        /// Gets or sets the CurrentScanMode property.
        /// </summary>
        /// <value>The CurrentScanMode property.</value>
        public UInt16 CurrentScanMode
        {
            get { return currentScanMode; }
            set { currentScanMode = value; }
        }

        /// <summary>
        /// Gets or sets the CurrentVerticalResolution property.
        /// </summary>
        /// <value>The CurrentVerticalResolution property.</value>
        public UInt32 CurrentVerticalResolution
        {
            get { return currentVerticalResolution; }
            set { currentVerticalResolution = value; }
        }

        /// <summary>
        /// Gets or sets the Description property.
        /// </summary>
        /// <value>The Description property.</value>
        public string Description
        {
            get { return description; }
            set { description = value; }
        }

        /// <summary>
        /// Gets or sets the DeviceID property.
        /// </summary>
        /// <value>The DeviceID property.</value>
        public string DeviceID
        {
            get { return deviceID; }
            set { deviceID = value; }
        }

        /// <summary>
        /// Gets or sets the DeviceSpecificPens property.
        /// </summary>
        /// <value>The DeviceSpecificPens property.</value>
        public UInt32 DeviceSpecificPens
        {
            get { return deviceSpecificPens; }
            set { deviceSpecificPens = value; }
        }

        /// <summary>
        /// Gets or sets the DitherType property.
        /// </summary>
        /// <value>The DitherType property.</value>
        public UInt32 DitherType
        {
            get { return ditherType; }
            set { ditherType = value; }
        }

        /// <summary>
        /// Gets or sets the DriverVersion property.
        /// </summary>
        /// <value>The DriverVersion property.</value>
        public string DriverVersion
        {
            get { return driverVersion; }
            set { driverVersion = value; }
        }

        /// <summary>
        /// Gets or sets the InstalledDisplayDrivers property.
        /// </summary>
        /// <value>The InstalledDisplayDrivers property.</value>
        public string InstalledDisplayDrivers
        {
            get { return installedDisplayDrivers; }
            set { installedDisplayDrivers = value; }
        }

        /// <summary>
        /// Gets or sets the MaxMemorySupported property.
        /// </summary>
        /// <value>The MaxMemorySupported property.</value>
        public UInt32 MaxMemorySupported
        {
            get { return maxMemorySupported; }
            set { maxMemorySupported = value; }
        }

        /// <summary>
        /// Gets or sets the MaxNumberControlled property.
        /// </summary>
        /// <value>The MaxNumberControlled property.</value>
        public UInt32 MaxNumberControlled
        {
            get { return maxNumberControlled; }
            set { maxNumberControlled = value; }
        }

        /// <summary>
        /// Gets or sets the MaxRefreshRate property.
        /// </summary>
        /// <value>The MaxRefreshRate property.</value>
        public UInt32 MaxRefreshRate
        {
            get { return maxRefreshRate; }
            set { maxRefreshRate = value; }
        }

        /// <summary>
        /// Gets or sets the MinRefreshRate property.
        /// </summary>
        /// <value>The MinRefreshRate property.</value>
        public UInt32 MinRefreshRate
        {
            get { return minRefreshRate; }
            set { minRefreshRate = value; }
        }

        /// <summary>
        /// Gets or sets the Monochrome property.
        /// </summary>
        /// <value>The Monochrome property.</value>
        public bool Monochrome
        {
            get { return monochrome; }
            set { monochrome = value; }
        }

        /// <summary>
        /// Gets or sets the Name property.
        /// </summary>
        /// <value>The Name property.</value>
        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        /// <summary>
        /// Gets or sets the NumberOfColorPlanes property.
        /// </summary>
        /// <value>The NumberOfColorPlanes property.</value>
        public UInt16 NumberOfColorPlanes
        {
            get { return numberOfColorPlanes; }
            set { numberOfColorPlanes = value; }
        }

        /// <summary>
        /// Gets or sets the NumberOfVideoPages property.
        /// </summary>
        /// <value>The NumberOfVideoPages property.</value>
        public UInt32 NumberOfVideoPages
        {
            get { return numberOfVideoPages; }
            set { numberOfVideoPages = value; }
        }

        /// <summary>
        /// Gets or sets the PNPDeviceID property.
        /// </summary>
        /// <value>The PNPDeviceID property.</value>
        public string PNPDeviceID
        {
            get { return pnpDeviceID; }
            set { pnpDeviceID = value; }
        }

        /// <summary>
        /// Gets or sets the PowerManagementSupported property.
        /// </summary>
        /// <value>The PowerManagementSupported property.</value>
        public bool PowerManagementSupported
        {
            get { return powerManagementSupported; }
            set { powerManagementSupported = value; }
        }

        /// <summary>
        /// Gets or sets the ProtocolSupported property.
        /// </summary>
        /// <value>The ProtocolSupported property.</value>
        public UInt16 ProtocolSupported
        {
            get { return protocolSupported; }
            set { protocolSupported = value; }
        }

        /// <summary>
        /// Gets or sets the ReservedSystemPaletteEntries property.
        /// </summary>
        /// <value>The ReservedSystemPaletteEntries property.</value>
        public UInt32 ReservedSystemPaletteEntries
        {
            get { return reservedSystemPaletteEntries; }
            set { reservedSystemPaletteEntries = value; }
        }

        /// <summary>
        /// Gets or sets the SpecificationVersion property.
        /// </summary>
        /// <value>The SpecificationVersion property.</value>
        public UInt32 SpecificationVersion
        {
            get { return specificationVersion; }
            set { specificationVersion = value; }
        }

        /// <summary>
        /// Gets or sets the Status property.
        /// </summary>
        /// <value>The Status property.</value>
        public string Status
        {
            get { return status; }
            set { status = value; }
        }

        /// <summary>
        /// Gets or sets the StatusInfo property.
        /// </summary>
        /// <value>The StatusInfo property.</value>
        public UInt16 StatusInfo
        {
            get { return statusInfo; }
            set { statusInfo = value; }
        }

        /// <summary>
        /// Gets or sets the SystemCreationClassName property.
        /// </summary>
        /// <value>The SystemCreationClassName property.</value>
        public string SystemCreationClassName
        {
            get { return systemCreationClassName; }
            set { systemCreationClassName = value; }
        }

        /// <summary>
        /// Gets or sets the SystemName property.
        /// </summary>
        /// <value>The SystemName property.</value>
        public string SystemName
        {
            get { return systemName; }
            set { systemName = value; }
        }

        /// <summary>
        /// Gets or sets the SystemPaletteEntries property.
        /// </summary>
        /// <value>The SystemPaletteEntries property.</value>
        public UInt32 SystemPaletteEntries
        {
            get { return systemPaletteEntries; }
            set { systemPaletteEntries = value; }
        }

        /// <summary>
        /// Gets or sets the VideoArchitecture property.
        /// </summary>
        /// <value>The VideoArchitecture property.</value>
        public UInt16 VideoArchitecture
        {
            get { return videoArchitecture; }
            set { videoArchitecture = value; }
        }

        /// <summary>
        /// Gets or sets the VideoMemoryType property.
        /// </summary>
        /// <value>The VideoMemoryType property.</value>
        public UInt16 VideoMemoryType
        {
            get { return videoMemoryType; }
            set { videoMemoryType = value; }
        }

        /// <summary>
        /// Gets or sets the VideoMode property.
        /// </summary>
        /// <value>The VideoMode property.</value>
        public UInt16 VideoMode
        {
            get { return videoMode; }
            set { videoMode = value; }
        }

        /// <summary>
        /// Gets or sets the VideoModeDescription property.
        /// </summary>
        /// <value>The VideoModeDescription property.</value>
        public string VideoModeDescription
        {
            get { return videoModeDescription; }
            set { videoModeDescription = value; }
        }

        /// <summary>
        /// Gets or sets the VideoProcessor property.
        /// </summary>
        /// <value>The VideoProcessor property.</value>
        public string VideoProcessor
        {
            get { return videoProcessor; }
            set { videoProcessor = value; }
        }
    }
}